package tesis.sin.rest.servicios;

import java.io.IOException;

import javassist.CannotCompileException;
import javassist.NotFoundException;

import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import tesis.sin.bd.BaseDatos;
import tesis.sin.model.Mensaje;
import tesis.sin.model.Noticia;
import tesis.sin.rest.parser.JsonParser;

import com.fasterxml.jackson.core.JsonProcessingException;

@Path("/")
public class ServicioPost{

	@Path(DirectorioServicios.SERVICIO_POST_MENSAJE)
    @POST
    @Produces(MediaType.TEXT_PLAIN)
    public String postMensaje(@FormParam("json") String json) throws JsonProcessingException, IOException {
    	JsonParser parser = JsonParser.getJsonParser();
    	Mensaje mensaje = parser.jsonAMensaje(json);
    	BaseDatos.guardarObjeto(mensaje);
    	return mensaje.toString();
    }	
	
	@Path(DirectorioServicios.SERVICIO_POST_NOTICIA)
    @POST
    @Produces(MediaType.TEXT_PLAIN)
    public String postNoticia(@FormParam("json") String json) throws JsonProcessingException, IOException {
    	JsonParser parser = JsonParser.getJsonParser();
    	Noticia noticia = parser.jsonANoticia(json);
    	BaseDatos.guardarObjeto(noticia);
    	return noticia.toString();
    }	
	
	@Path(DirectorioServicios.SERVICIO_POST_OBJETO)
    @POST
    @Produces(MediaType.TEXT_PLAIN)
    public String postRecursoUsuario(@FormParam("nombreClase") String nombreClase, @FormParam("json") String json) throws JsonProcessingException, IOException, NotFoundException, CannotCompileException {
		JsonParser parser = JsonParser.getJsonParser();
    	String paquete = "tesis.sin.rest.clasesusuario.";
    	Class claseRecurso;
    	try
    	{
    		claseRecurso = Class.forName(paquete + nombreClase);
    	}
    	catch (Exception e) {
    		claseRecurso = parser.jsonClase(paquete + nombreClase, json);
		}
    	
    	Object objeto = parser.getJsonParser().getMapper().readValue(json, claseRecurso);
    	BaseDatos.guardarObjeto(objeto);
    	return objeto.toString();
    }
}